package reflect;

import pojo.Person;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Scanner;

/**
* 使用指定的构造器,利用反射实例化对象
* */
public class ReflectDemo5 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        //传统方式实例化对象:new
        Person p = new Person("李四", 23);
        System.out.println(p);
        //利用反射实例化对象:动态化
        //1加载Class对象
        Class cls = Class.forName("pojo.Person");
        //2获取要调用的构造器(无参构造无须此步)new Person("李四", 23);
        //cls.getConstructor();获取无参构造
        //需要指定对应的构造器的参数,使用参数的Class类对象并且顺序要和构造方法一致
        Constructor c = cls.getConstructor(String.class, int.class);
        //3通过获取的构造器来实例化对象
        //由于调用的是含参构造,所以也需要传入对应的参数值,具体的值的顺序和类型不能变
        Object o = c.newInstance("王五",18);
        System.out.println(o);
    }
}
